Добавьте конфигурации параметров на существующую аппаратную платформу на основе схемы:
eMMC напрямую припаян к основной плате и подключен к SD1 на стороне PS. TF-карта на плате разработки подключена к SD0 на стороне PS.
Схема:
Интерфейс конфигурации: Обратите внимание, что TF-карта, соответствующая SD0, использует пин Card Detect, который соответствует MIO9.
После синтеза и реализации экспортируйте новый файл .xsa.
В Vitis обновите проект платформы: щелкните правой кнопкой мыши по созданному проекту платформы, выберите «Update Hardware Specification» и укажите путь к файлу .xsa. Появится следующее всплывающее окно; нажмите OK, что будет означать успешное обновление.
Поскольку проект приложения должен использовать файловую систему, необходимо изменить BSP и добавить пакет, связанный с файловой системой (xilffs):
Пересоберите проект платформы.
Затем создайте новый пустой проект приложения .c и добавьте файл .c.
Добавьте соответствующий код.
Код проекта приложения поддерживает тестирование как TF-карты, так и eMMC.
Тестовый код выглядит следующим образом:
x
const char *sd_path[] = {"0:/", "1:/"};const char *file_name[] = {"0:/test.txt", "1:/test.txt"};
const char src_str[30] = "this is a test string!";
//Initialize file systemint platform_init_fs(uint8_t sd_id){ FRESULT status;
BYTE work[FF_MAX_SS];
status = f_mount (&fatfs, sd_path[sd_id], 1 ); if (status != FR_OK) { xil_printf("Volume is not FAT formated; formating FAT\r\n");
status = f_mkfs(sd_path[sd_id], FM_FAT32, 0, work, sizeof work); if (status != FR_OK) { xil_printf("Unable to format FATfs\r\n"); return -1; }
status = f_mount(&fatfs, SD_PATH, 1); if (status != FR_OK) { xil_printf("Unable to mount FATfs\r\n" ); return -1; } } return 0;}
//Mount SD (TF) cardint sd_mount(uint8_t sd_id){ FRESULT status;
status = platform_init_fs(sd_id); if (status) { xil_printf("ERROR: f_mount returned %d!\n", status); return XST_FAILURE; } return XST_SUCCESS;}
//SD card write dataint sd_write_data(char *file_name, u32 src_addr, u32 byte_len){ FIL fil; UINT bw;
f_open(&fil, file_name, FA_CREATE_ALWAYS | FA_WRITE); f_lseek(&fil, 0); f_write(&fil, (void *)src_addr, byte_len, &bw); f_close(&fil); return 0;}
//SD card Read dataint sd_read_data(char *file_name, u32 src_addr, u32 byte_len){ FIL fil; UINT br;
f_open(&fil, file_name, FA_READ); f_lseek(&fil, 0); f_read(&fil, (void *)src_addr, byte_len, &br); f_close(&fil); return 0;}
void sd_emmc_test(uint8_t sd_id){ int status, len; char dest_str[30] = "";
status = sd_mount(sd_id); if(status != XST_SUCCESS ) { xil_printf("Failed to open SD card!\r\n" ); return 0; } else xil_printf("Success to open SD card!\r\n");
len = strlen(src_str ); sd_write_data(file_name[sd_id],(u32)src_str, len ); sd_read_data(file_name[sd_id],(u32)dest_str, len );
if (strcmp(src_str, dest_str) == 0) { xil_printf("src_str is equal to dest_str, SD card test success!\r\n"); } else { xil_printf("src_str is not equal to dest_str, SD card test failed!\r\n"); }}
Следуйте шагам компиляции и отладки, описанным в документации IIC.
Перед тестированием TF-карты сначала вставьте TF-карту.
Подключите кабель JTAG USB и кабель PS UART, затем подайте питание на плату разработки.
В Vitis войдите в режим отладки, загрузите программу и выполните ее. Результаты отладки: